package site.marqstree.smartbutler.adapter;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import java.util.List;

import site.marqstree.smartbutler.R;
import site.marqstree.smartbutler.entity.CourierData;

/*
 * 项目名: SmartButler
 * 包名: site.marqstree.smartbutler.adapter
 * 文件名: CourierAdapter
 * 创建者: marqstree
 * 创建时间: 2020/1/4 17:51
 * 描述: TODO
 */
public class CourierAdapter extends BaseAdapter {

    private Context mContext;
    private List<CourierData> mList;
    //布局加载器
    private LayoutInflater inflater;
    private CourierData data;

    public CourierAdapter(Context mContext, List<CourierData> mList) {
        this.mContext = mContext;
        this.mList = mList;
        //调用系统服务，获取布局加载器
        inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public int getCount() {
        return mList.size();
    }

    @Override
    public Object getItem(int position) {
        return mList.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    //①通过重复利用移出屏幕的条目容器控件
    //若不重复利用条目控件，会导致内存溢出
    //移出屏幕的条目控件被垃圾回收机制自动释放，但移动速度超过垃圾回收机制销毁速度时，会导致内存溢出
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder viewHolder = null;
        //第一次加载
        //没有可以复用的旧的view 需要创建新的条目view对象
        if(convertView == null){
            //创建新的条目View对象
            //将布局文件转成View
            convertView = inflater.inflate(R.layout.layout_courier_item,null);
            //用ViewHolder持有控件
            viewHolder = new ViewHolder();
            viewHolder.tv_remark = (TextView) convertView.findViewById(R.id.tv_remark);
            viewHolder.tv_zone = (TextView) convertView.findViewById(R.id.tv_zone);
            viewHolder.tv_datetime = (TextView) convertView.findViewById(R.id.tv_datetime);
            //将ViewHolder缓存到条目View中
            convertView.setTag(viewHolder);
        }
        //有旧的条目View，重新赋值再利用
        else{
            //从条目View中通过ViewHolder得到控件
            //省去findeViewById步骤
            viewHolder = (ViewHolder) convertView.getTag();
        }

        //设置数据
        data = mList.get(position);

        //给条目View中的控件赋值
        viewHolder.tv_remark.setText(data.getRemark());
        viewHolder.tv_zone.setText(data.getZone());
        viewHolder.tv_datetime.setText(data.getDatetime());
        return convertView;
    }

    //条目布局中的控件的容器
    class ViewHolder{
        private TextView tv_remark;
        private TextView tv_zone;
        private TextView tv_datetime;
    }
}
